package com.aust.dynamicProxy.test5;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;

public class AOPHandler implements InvocationHandler {
    private Object target;

    public AOPHandler(Object target) {
        this.target = target;
    }

    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        /**
         * 通过反射找到原始方法（因为 method 是接口的方法）
         * 从真实目标对象 target 的 class 中取出真正的方法
         */
        Method realMethod = target.getClass().getMethod(method.getName(), method.getParameterTypes());
        if (realMethod.isAnnotationPresent(Log.class)) {
            System.out.println("方法调用：" + method.getName());
        }
        return method.invoke(target, args);
    }
}
